/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import java.util.Iterator;
import java.util.List;
import structure.Line;
import javax.swing.table.DefaultTableModel;

/**
 * TableModel zur Darstellung des Quellcodes in einer JTable.
 * @author Patrick Lehmann
 */
public class SourceCodeTableModel extends DefaultTableModel {

    public SourceCodeTableModel() {
    }

    public SourceCodeTableModel(Object[][] data, Object[] columnNames) {
        super(data, columnNames);
    }

    /**
     * Füllt JTable mit Zeilennummern und Quellcodezeilen.
     * @param list Liste mit Quellcode
     */
    public void setDataVector(List<Line> list) {
        Object[][] tableContent = new Object[list.size()][3];
        int i = 0;
        for (Iterator<Line> it = list.iterator(); it.hasNext();) {
            Line line = it.next();
            //tableContent[i][0]= false;
            tableContent[i][1] = line.getLineNumber();
            tableContent[i][2] = line.getProgramCode();
            i++;
        }
        super.setDataVector(tableContent, new String[]{
                    "Breakpoint", "Line", "Code"
                });
    }

    /**
     * Überschriebene Methode. Nur Spalte mit Index 0 ist editierbar,
     * um Breakpoints setzen zu können.
     * @param rowIndex
     * @param columnIndex
     * @return
     */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex == 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * Definiert die Typen in der JTable und gibt den jeweilgen Typ der Spalte zurück.
     * @param columnIndex
     * @return
     */
    @Override
    public Class getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return Boolean.class;
            case 1:
                return String.class;
            case 2:
                return String.class;
            default:
                return null;
        }

    }
}
